package com.example.demo.mapper;

import com.example.demo.entity.Articleinfo;
import com.example.demo.entity.Userinfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

// 2.
@Mapper // 作用和五大类注解一样, 让类加载的时候注入到soring中
public interface UserMapper {
    // 通过 用户id 从数据库获取信息
    // 加了 @Param("user_id") 之后, 此处的 id 就没有了实际意义, 可以不用去管它了.
    Userinfo getUserById(@Param("user_id") Integer id);

    // 查询所有用户
    List<Userinfo> getAll();

    // 插入操作 insert 操作的返回值是 int.
    // 传入一个对象. 尽量不要传属性.
    Integer insert(Userinfo userinfo);

    // 添加用户并返回用户 id.
    Integer insertGetId(Userinfo userinfo);

    // 修改用户信息
    Integer updateUserName(Userinfo userinfo);

    // 删除用户信息.
    Integer deleteUserById(@Param("id") Integer id);

    // 验证 # 和 $ 的区别
    List<Userinfo> selectUserByName(@Param("name") String name);
    // 使用$ 的场景, 按照id从高到低查询数据库的用户信息
    List<Userinfo> selUserByIdDesc(@Param("desc") String desc);

    // Sql 注入问题
    Userinfo login(@Param("username") String username,
                   @Param("password") String password);

    // like 查询.
    List<Userinfo> getListByName(@Param("username") String username);

    /**
     *  动态sql查询.
     */
    // 1. 动态sql 之 if标签.
    Integer add(Userinfo userinfo);
    // 2. trim 标签
    Integer insert2(Userinfo userinfo);
    // 3. where 标签
    List<Userinfo> selectWhere(String password, String username);
    // 4. set 标签
    Integer update(Userinfo userinfo);
    // 5. foreach 标签.
    Integer delete(@Param("list") List<Integer> list);
}
